import router from '@/router';
import { ElMessage } from 'element-plus';
import useStore from '@/store';
import { ro } from 'element-plus/es/locale';

// 白名单路由
const whiteList = ['/login'];

// router.beforeEach(async (to, from, next) => {
//   const { user, permission } = useStore();
//   const hasToken = user.token;
//   if (hasToken) {
//     // 登录成功，跳转到首页
//     if (to.path === '/login') {
//       next({ path: '/' });
//     } else {
//       const hasGetUserInfo = user.roles.length > 0;
//       if (hasGetUserInfo) {
//         if (to.matched.length === 0) {
//           from.name ? next({ name: from.name }) : next('/401');
//         } else {
//           next();
//         }
//       } else {
//         try {
//           await user.getUserInfo();
//           const roles = user.roles;
//           const accessRoutes: any = await permission.generateRoutes(roles);
//           accessRoutes.forEach((route: any) => {
//             router.addRoute(route);
//           });
//           next({ ...to, replace: true });
//         } catch (error) {
//           // 移除 token 并跳转登录页
//           await user.resetToken();
//           ElMessage.error((error as any) || 'Has Error');
//           next(`/login?redirect=${to.path}`);
//         }
//       }
//     }
//   } else {
//     // 未登录可以访问白名单页面(登录页面)
//     if (whiteList.indexOf(to.path) !== -1) {
//       next();
//     } else {
//       next(`/login?redirect=${to.path}`);
//     }
//   }
// });


//路由拦截器，权限管理实现的主要依据
router.beforeEach(async (to, from, next) => {
  console.log("就是这里")
  const { user, permission } = useStore();
  console.log(to.path)
  const hasLogin = user.account;
  console.log(to.path)
  console.log(from.path)
  console.log(hasLogin)
  console.log(permission.addRoutes)
  //这里就已经意味着，这个人登录了系统了
  if(hasLogin){
    //登录成功之后，如果还想跳转到登录页面，约束住他，把他转去首页
    if (to.path === '/login') {
       next({ path: '/home' });
     }
     //如果是去其他界面
     else{
      //先检查动态路由是否已经挂载
      console.log(permission.addRoutes)
      console.log(permission.addRoutes.length == 0)
      if(permission.addRoutes.length != 0)  //如果挂载了，就把目标路由和已经挂载的路由进行比对
      {
        console.log("挂载了，准备匹配")
        //路由匹配
        if (to.matched.length === 0) {
          from.name ? next({ name: from.name }) : next('/401');  //匹配失败，从哪来回哪去（实际上它并非直接跳转，而是改变了to的目标然后再执行了beforeEach），去401页面也是如此
        } else {
          next();  //匹配成功直接放走
        }
      }
      //动态路由还没有挂载成功
      else{
        //尝试挂载动态路由，
        try {
          await user.getUserInfo();
          const roles = user.roles;
          console.log(roles);
          const accessRoutes: any = await permission.generateRoutes(roles);  //在这里面，我通过角色过滤路由，并且把路由放到pina的空间中存储下来
          //挂载动态路由
          accessRoutes.forEach((route: any) => {
            router.addRoute(route);
          });
          //如果这时候直接去匹配路由，肯定不会成功的，因为加载动态路由，是异步的
          //所以，直接重新进行一次路由请求
          next({ ...to, replace: true });
        } catch (error) {
          // 移除 登录的痕迹 并跳转登录页
          await user.resetAccount();
          ElMessage.error((error as any) || 'Has Error');
          next(`/login`);
        }

      }

     }
  }
  else {
        // 未登录可以访问白名单页面(登录页面)
        if (whiteList.indexOf(to.path) !== -1) {
          next();
        } else {
          next(`/login`);
        }
      }

  


          // const roles = ["系统管理员"];
          
          // console.log(permission.$state.addRoutes.length  == 1)
          // if(permission.$state.addRoutes.length  == 0){
          //   console.log("没有动态路由的时候才执行添加动态路由的操作")
          //   const accessRoutes: any = await permission.generateRoutes(roles);      
          //   accessRoutes.forEach((route: any) => {
          //     router.addRoute(route);
          //   });
          //   next({ ...to, replace: true });
          // }else{
          //   next()
          // }


          //   console.log(permission.$state.routes);

          
          
});



